#ifndef COMMOM_H
#define COMMOM_H
#include <QObject>
#include <QWidget>
#include <QSerialPortInfo>
#include <QComboBox>
#include "FloraLogger.h"
#include "FloraIniManager.h"
#include "qcustomplot.h"
#include <QSerialPort>

/**
 * @brief       函数简要说明（1-2句）
 * @details     函数详细说明（功能描述、实现原理等，选填）
 *
 * @param[in]   参数名1    参数说明，是否输入参数
 * @param[out]  参数名2    参数说明，是否输出参数
 * @param[in,out]参数名3   参数说明，输入输出参数
 *
 * @return      返回值说明（类型，含义）
 *
 * @note        备注（调用注意事项，限制条件等）
 * @warning     警告信息（风险点，特殊处理等）
 *
 * @author      作者
 * @date        日期
 */
// ==================== 结构体定义 ====================
void findSerialPorts(QComboBox *comboBox);

struct CustomPlotOptions {
    bool enableZoom = true;          // 是否启用缩放
    bool enableDrag = true;          // 是否启用拖动
    bool showGrid = true;            // 是否显示网格
    QString xAxisLabel = "X Axis";   // X轴标签
    QString yAxisLabel = "Y Axis";   // Y轴标签
};
QCustomPlot* createCustomPlotWidget(QWidget *parent, const CustomPlotOptions& options= CustomPlotOptions());
QSerialPort* createSerialPort(const QString &portName,
                              qint32 baudRate = QSerialPort::Baud115200,
                              QSerialPort::DataBits dataBits = QSerialPort::Data8,
                              QSerialPort::StopBits stopBits = QSerialPort::OneStop,
                              QSerialPort::Parity parity = QSerialPort::NoParity);
/**
 * @brief 安全访问 QVector 元素，返回指针，可读写。
 * @param vec 目标 QVector
 * @param index 要访问的索引
 * @return 如果索引合法，返回元素地址；越界返回 nullptr
 */
template<typename T>
T* qvecSafeAt(QVector<T>& vec, int index);

/**
 * @brief 安全修改 QVector 元素
 * @param vec 目标 QVector
 * @param index 要修改的索引
 * @param value 新值
 * @return 修改成功返回 true，索引越界返回 false
 */
template<typename T>
bool qvecSafeSet(QVector<T>& vec, int index, const T& value);


// 安全访问函数：返回指针，可读写
template<typename T>
T* qvecSafeAt(QVector<T>& vec, int index);

template<typename T>
T* qlistSafeAt(QList<T>& list, int index);
template<typename T>
bool qlistSafeSet(QList<T>& list, int index, const T& value);

QSettings *GlobalIni(const QString path = "config.ini");
#endif // COMMOM_H
